/**
 * 路由鉴权
 * 鉴权：项目中路由能不能被权限设置（某个路由什么条件下可以访问，什么条件下不可以访问）
 */
import router from './router'
//引入进度条nprogress及样式文件
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import setting from '@/settings'
//引入userStore
import pinia from '@/store/index'
import useUserStore from '@/store/modules/user'
import nProgress from 'nprogress'
let userStore = useUserStore(pinia)
//获取用户名
let username = userStore.username
//取消进度加载
nProgress.configure({ showSpinner: false })
//全局前置守卫
// to: Route: 即将进入的目标路由对象
// from: Route: 当前导航正要离开的路由对象
// next: Function: 路由的放行函数，一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数
router.beforeEach(async (to, from, next) => {
  //设置打开页面的标题
  document.title = setting.title + '_' + to.meta.title || 'vue3-admin'
  //访问之前加载进度条
  NProgress.start()

  if (!userStore.token) {
    //用户未登录，可以访问login，其他路由不能访问
    if (to.path === '/login') {
      next()
    } else {
      next({ path: '/login', query: { redirect: to.path } })
    }
  } else {
    //用户已登录，如果访问login，跳转到首页
    if (to.path === '/login') {
      next({ path: '/' })
    } else {
      if (username) {
        next()
      } else {
        //如果没有用户信息，在守卫这里发送请求获取到用户信息后再放行
        try {
          await userStore.userInfo()
          next()
        } catch (error) {
          //用户token过期失效或者用户手动修改token值
          await userStore.userLogout()
          next({ path: '/login', query: { redirect: to.path } })
        }
      }
    }
  }
})

//全局后置守卫
router.afterEach((to, from) => {
  // console.log('afterEach')
  //访问之后关闭进度条
  NProgress.done()
})

//通过nprogress插件实现进度条效果
//路由鉴权（路由组件访问权限的设置）
/**
 * 用户未登录，可以访问login，其他路由不能访问
 * 用户登录成功，不可以访问login（直接指向首页/）,其余的路由可以正常访问
 */
